package com.dragon.modules.yuegou.service.member;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dragon.common.web.PageRequest;
import com.dragon.modules.yuegou.entity.member.MemberEntity;
import com.dragon.modules.yuegou.enums.YsqAppType;
import com.dragon.modules.yuegou.enums.member.WxOpenidRefOpenIdType;
import com.dragon.modules.yuegou.model.member.Member;
import com.dragon.modules.yuegou.model.member.MerchantList;
import com.dragon.modules.yuegou.model.member.ReportQuery;
import com.dragon.modules.yuegou.model.member.UserInfoModel;
import com.dragon.modules.yuegou.model.member.UserReportModel;
import com.dragon.modules.yuegou.model.product.ProductFavorite;
import com.dragon.modules.yuegou.model.system.Document;
import com.dragon.modules.yuegou.query.member.MemberLevelQuery;
import com.dragon.modules.yuegou.query.member.PasswordQuery;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 会员信息 服务接口
 *
 * @author pbuilder generated
 * @date 2019-03-19 08:59:40
 * @version 2.0
 */
public interface MemberService extends IService<MemberEntity> {

	/**
	 * 根据ID查询会员，对昵称进行转换，如果查不到则返回null
	 * @param id
	 * @return
	 */
	Member getMember(String id);
	
    /**
     * 创建会员
     * @param member 包含商圈id 会员手机号 openid
     * @param wxAppid 选填 C端创建时必填 后台不必填
     * @return
     */
	Member createMember(Member member, String wxAppid, WxOpenidRefOpenIdType openIdType, YsqAppType current);

	/**
	 * 创建会员
	 * @param busdId 商圈ID
	 * @param mobile 手机号
	 * @return 会员ID
	 */
	String createMember(String busdId,String mobile,YsqAppType ysqAppType);
	
    /**
     * 根据手机号查询会员
     * @param mobile
     * @return
     */
    Member getMemberByMobile(String mobile);


    /**
     * 根据unionid查询会员
     * @param wxUnionId
     * @return
     */
    Member getMemberByWxUnionId(String wxUnionId);

    /**
     * 根据openid查询会员
     * @param wxOpenId
     * @return
     */
    Member getMemberByWxOpenId(String wxOpenId,String appid);
    
    /**
     * 根据union查询会员
     * @param wxUnionId
     * @return
     */
    Member getMemberByWxUnionId(String wxUnionId,String appid);

    /**
     * 集团根据商圈id分页获取商圈会员列表
     * */
    IPage<Member> search(PageRequest page, MemberLevelQuery query);

    /**
     * 根据id查看会员信息
     * */
    Member getMemberById(String id,String busdId);

    /**
     * 导出会员信息
     * */
	Document exportMember(MemberLevelQuery query);

    /**
     * 根据用户Id查询用户信息
     * */
	Member getMember(String busdId,String memberId);

	/**
	 * 修改用户信息
	 * */
	Member updateMember(Member member);

	/**
	 * 修改登录密码
	 * */
	Member modifyLoginPassword(String memberId,String newPassword,String oldPassword);

	/**
	 * 忘记登录密码
	 * */
	Member forgetLoginPassword(PasswordQuery query);

	/**
	 * 获得当前会员收藏列表
	 * */
	List<MerchantList> getFavorite(PageRequest page, String busdId,String memberId);

    /**
     * 删除会员收藏商铺
     * */
	void deleteFavorite(String merchantId, String memberId);

	/**
	 * 获取推荐用户
	 * @param gender
	 * @param memberId
	 * @return
	 */
	String getRecMembers(Integer gender, String memberId);

	/**
	 * 获得会员收藏商品列表
	 * @param page 页码
	 * @param busdId 商圈id
	 * @param memberId  会员id
	 * @return
	 */
	List<ProductFavorite> getSpuFavorite(PageRequest page, String busdId, String memberId);

	/**
	 * 获取用户分析数据
	 * @param userReportQuery
	 * @return
	 */
	UserReportModel getUserBaseReport(ReportQuery userReportQuery);


	/**
	 * 获取商圈的用户统计数据
	 * @param userReportQuery
	 * @return
	 */
	UserReportModel getAllUserReport(ReportQuery userReportQuery);


	/**
	 * 获取用户属性列表--BI报表
	 * @param page
	 * @param userReportQuery
	 * @return
	 */
	IPage<UserInfoModel> getUserInfoList(PageRequest page, ReportQuery userReportQuery);

	/****
	 * 获取导入模板
	 *
	 * @return
	 */
    Document getMemberTemplate();

	void importMember(MultipartFile file, String busdId);

    Boolean judge(String memberId);

	/**
	 * 根据阿里云appid  获取会员信息
	 * @param appId
	 * @return
	 */
	Member getMemberByAliAppid(String appId);
}